package com.mayuanfei.springproxy.cglibproxy;

import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * Cglib 实现动态代理
 *
 * @author 老马
 * @date 2023-02-28 11:14
 */
public class PersionCglibProxy implements MethodInterceptor {
    /**
     * @param o 代理对象persionProxy
     * @param method 父类原本要执行的方法 Persion.eat()方法
     * @param objects 调用时传入的参数
     * @param methodProxy 子类中重写父类的方法persionProxy.eat()
     * @return
     * @throws Throwable
     */
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        Object result = null;
        if(method.getName().equals("eat")){
            System.out.println("吃饭前洗手");
            result = methodProxy.invokeSuper(o, objects);
            System.out.println("吃饭后洗碗");
        }else {
            // 其他方法正常执行
            result = methodProxy.invokeSuper(o, objects);
        }
        return result;
    }
}